home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lantools / blueprnt / symtab.c < prev   
C/C++ Source or Header  |  1990-11-14  |  2KB  |  77 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int hash_code (char key[10])
  6. {
  7.     return(toupper(key[1])*strlen(key)%50);
  8. }
  9.  
  10. int symbol_check (symbol_rec *symbol; int modify)
  11. {
  12.     symbol_rec *temp_ptr=NULL, *search_ptr=NULL, *previous_ptr=NULL;
  13.     int located;
  14.  
  15.     symbol.key=hash_code(symbol.symbol);
  16.     search_ptr=table;
  17.     while (!(search_ptr==NULL) && !(symbol.key==search_ptr->key))
  18.         {
  19.             previous_ptr=search_ptr;
  20.             if (symbol.key<search_ptr.key)
  21.                 search_ptr=search_ptr->left;
  22.             else
  23.                 search_ptr=search_ptr->right;
  24.         }
  25.     if (search_ptr==NULL)
  26.         {
  27.             located=false;
  28.             temp_ptr=malloc(sizeof(symbol_rec));
  29.             temp_ptr=symbol;
  30.             temp_ptr->left=NULL;
  31.             temp_ptr->right=NULL;
  32.             temp_ptr->list=NULL;
  33.             if (search_ptr==table)
  34.                 table=temp_ptr;
  35.             else
  36.                 if (symbol.key<previous_ptr->key)
  37.                     previous_ptr->left=temp_ptr;
  38.                 else
  39.                     previous_ptr->right=temp_ptr;
  40.         }
  41.     else
  42.         {
  43.             located=false;
  44.             while ((search_ptr<>NULL) && (symbol.symbol<>search_ptr->symbol))
  45.                 {
  46.                     previous_ptr=search_ptr;
  47.                     search_ptr=search_ptr->list;
  48.                 }
  49.             if (search_ptr=NULL)
  50.                 {
  51.                     located=false;
  52.                     temp_ptr=malloc(sizeof(symbol_rec);
  53.                     *temp_ptr=symbol;
  54.                     temp_ptr->list=NULL;
  55.                     temp_ptr->left=NULL;
  56.                     temp_ptr->right=NULL;
  57.                     previous_ptr->list=temp_ptr;
  58.                 }
  59.             else
  60.                 {
  61.                     located=true;
  62.                     if !(modify)
  63.                         symbol=search_ptr;
  64.                     else
  65.                         {
  66.                             symbol_ptr->location=symbol.location;
  67.                             search_ptr->symbolt=symbol.symbolt;
  68.                         }
  69.                 }
  70.         }
  71. }
  72.  
  73.  
  74.             located=false
  75.  
  76.  
  77.